﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SouthApps.MobileHealth.SDK.DAL.Model;
using SouthApps.MobileHealth.SDK.Cache;

namespace SouthApps.MobileHealth.SDK.DAL.DataAccess
{
    public class LocacionServicioEspecialDao : DataAccessObject
    {
        #region Get

        public LocacionServicioEspecial GetLocacionServicioEspecial(int locacionservicioespecialId)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    return entities.locacionservicioespecial.FirstOrDefault(e =>
                        e.locacionServicioEspecialId == locacionservicioespecialId);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        public List<LocacionServicioEspecial> GetLocacionesServicioEspecialFinanciador(int financiadorId, int? servicioEspecialId)
        {
            return this.GetLocacionesServicioEspecialFinanciador(financiadorId, servicioEspecialId, true);
        }

        public List<LocacionServicioEspecial> GetLocacionesServicioEspecialFinanciador(int financiadorId, int? servicioEspecialId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = from e in entities.locacionservicioespecial.Include("Departamento.Provincia.Pais").Include("ServicioEspecial")
                                where (e.financiadorId == financiadorId && (!servicioEspecialId.HasValue || e.servicioEspecialId == servicioEspecialId) && e.activo == activo)
                                select e;

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Add

        public void AddLocacionServicioEspecial(LocacionServicioEspecial locacionservicioespecial)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    entities.AddTolocacionservicioespecial(locacionservicioespecial);
                    this.SaveChanges(entities);
                    LocacionesServicioEspecialCache.AddLocacionServicioEspecialToCache(locacionservicioespecial.financiadorId, locacionservicioespecial);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Modify

        public void ModifyLocacionServicioEspecial(LocacionServicioEspecial locacionServicioEspecial)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    LocacionServicioEspecial oldLocacionServicioEspecial = entities.locacionservicioespecial.FirstOrDefault(e => e.locacionServicioEspecialId == locacionServicioEspecial.locacionServicioEspecialId);
                    oldLocacionServicioEspecial = locacionServicioEspecial;
                    this.SaveChanges(entities);
                    LocacionesServicioEspecialCache.UpdateLocacionServicioEspecialToCache(locacionServicioEspecial.financiadorId, locacionServicioEspecial);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion
    }
}
